// @flow
import React, { Component } from 'react'
import styles from './Customer.css'
import { Button, Form } from 'antd'
import CustomerGrid from './CustomerGrid'
import CustomerFillter from 'components/CustomerFillter'
import universalFetch, { handleFetchError } from 'store/modules/fetch'
import { connect } from 'react-redux'
type Props = {
  userId: string,
  history: Object,
  form: Object
}
type States = {
  customers: Array<Object>,
  total: number,
  current: number,
  pageSize: number
}
class Customer extends Component {
  props: Props
  state: States
  queryUrl: String
  getCustomers: Function
  addCustomer: Function
  handleSearch: Function
  constructor (props: Props) {
    super(props)
    this.state = {
      customers: [],
      total: 0,
      current: 1,
      pageSize: 20
    }
    this.getCustomers = this.getCustomers.bind(this)
    this.addCustomer = this.addCustomer.bind(this)
    this.handleSearch = this.handleSearch.bind(this)
  }
  handleSearch (searchQuery) {
    this.queryUrl = searchQuery
    this.setState({
      current: 1
    }, () => {
      this.getCustomers(this.state.current, this.state.pageSize)
    })
  }
  componentDidMount () {
    this.getCustomers(this.state.current, this.state.pageSize)
  }

  getCustomers (page: number, pageSize: number) {
    let queryUrl = this.queryUrl || ``
    universalFetch(`${__SERVICE_API__}device/customers?userId=${this.props.userId}&pageNum=${page}&pageSize=${pageSize}${queryUrl}`)
      .then(res => res.json())
      .then((json) => {
        if (json.code !== 200000) {
          throw new Error(JSON.stringify({
            code: json.code,
            message: json.message
          }))
        }
        this.setState({
          current: page,
          total: json.pageInfo.total,
          customers: json.result
        })
      })
      .catch((error) => {
        handleFetchError(error)
        console.error(error)
      })
  }

  addCustomer () {
    this.props.history.push('/business/customer-add')
  }
  render () {
    const { customers, current, pageSize, total } = this.state
    return (
      <div className={styles['main']}>
        <div className={styles['action']}>
          <Button type='primary' onClick={this.addCustomer} style={{ marginTop: '6px' }}>添加客户</Button>
          <CustomerFillter getData={this.handleSearch} />
        </div>
        <CustomerGrid {...{
          current,
          pageSize,
          total,
          refreshCustomers: this.getCustomers,
          rowData: customers,
          history: this.props.history
        }} />
      </div>
    )
  }
}

const mapStatesToProps = (state) => {
  return {
    userId: state.user.userId
  }
}
export default connect(mapStatesToProps, {})(Form.create()(Customer))
